{
  lib,
  stdenv,
  fetchurl,
  fetchpatch,
  autoreconfHook,
  enableStatic ? stdenv.hostPlatform.isStatic,
  enableShared ? !stdenv.hostPlatform.isStatic,
}:

stdenv.mkDerivation rec {
  pname = "termcap";
  version = "1.3.1";

  src = fetchurl {
    url = "mirror://gnu/termcap/termcap-${version}.tar.gz";
    hash = "sha256-kaDiLlOHykRntbyxjt8cUbkwJi/UZtX9o5bdnSZxkQA=";
  };

  patches = [
    (fetchpatch {
      name = "0001-tparam-replace-write-with-fprintf.patch";
      url = "https://github.com/msys2/MINGW-packages/raw/c6691ad1bd9d4c6823a18068ca0683c3e32ea005/mingw-w64-termcap/0001-tparam-replace-write-with-fprintf.patch";
      hash = "sha256-R9XaLfa8fzQBt+M+uA1AFTvKYCeOWLUD/7GViazXwto=";
    })
  ];

  outputs = [
    "out"
    "dev"
  ];

  enableParallelBuilding = true;

  strictDeps = true;

  nativeBuildInputs = [ autoreconfHook ];

  makeFlags = [
    "AR=${stdenv.cc.targetPrefix}ar"
  ];

  env.NIX_CFLAGS_COMPILE = toString (
    [
      "-DSTDC_HEADERS"
    ]
    ++ lib.optionals stdenv.cc.isClang [
      "-Wno-implicit-function-declaration"
    ]
  );

  # Library only statically links by default
  postInstall =
    lib.optionalString (!enableStatic) ''
      rm $out/lib/libtermcap.a
    ''
    + lib.optionalString enableShared (
      let
        libName = "libtermcap${stdenv.hostPlatform.extensions.sharedLibrary}";
        impLibName = "libtermcap.dll.a";
        winImpLib = lib.optionalString stdenv.hostPlatform.isWindows "-Wl,--out-implib,${impLibName}";
      in
      ''
        ${stdenv.cc.targetPrefix}cc -shared -o ${libName} termcap.o tparam.o version.o ${winImpLib}
        install -Dm644 ${libName} $out/lib
      ''
      + lib.optionalString stdenv.hostPlatform.isWindows ''
        install -Dm644 ${impLibName} $out/lib
      ''
    );

  meta = {
    description = "Terminal feature database";
    homepage = "https://www.gnu.org/software/termutils/";
    license = lib.licenses.gpl2Plus;
    maintainers = with lib.maintainers; [ wegank ];
    platforms = lib.platforms.all;
  };
}
